レベルを指定する。 こうしてみると、 \newsection マクロは見出し番号の表 現方法を指定しているだけのようであるが、実際には \newsection はその名の通り、第 1 引数で指定された名前 の \ chapter のような見出しマクロを作成するマクロであ る。次に、この \ Ⅱ ewsecti 。 n で作られる見出しマクロの骨 組みを見てみよう。 見出しマクロの骨組み \chapter のような見出しマクロは、リスト 1 のように使 われ、引数はリスト 3 のようになる。オプションの第 1 引数 が省略されると、第 2 引数がそのまま第 1 引数にも使われ る。 この引数を取って動作する \ newsecti 。 n で作られる見出 しマクロの動作の概要は、以下のようなものになる。名 則 > 」は、 \chapter ならば「 chapter 」になる。 1. 「 \鈬名前 >pagehead 」を実行する。 2. 「く名前 > 」のカウンタを 1 っ増やす。 3. 「 \ く名前 > STR 」というマクロに第 1 引数 ( 余計なトリガ を外した見出し文字列 ) を定義する。 4. 「 \ く名前 > str 」というマクロに第 2 引数 ( 見出し文字列 ) を定義する。 5. EWB 用の currentlabel を定義する。この内容が、これ以 降ラベルで使われる。 6. rog ファイル注 2 に見出し情報を書き出す。 7. 第 3 引数のラベル名でラベルを定義する。 8. 「 \ THE く名前 > 」を第 1 引数に、見出しマクロの第 2 引数 ( 見出し文字列 ) を第 2 引数に渡して、「 \@make く名前 > 表 1 見出しカウンタの表記方法 head 」を実行する。 9. 見出しマクロの第 1 引数 ( 余計なトリガを外した見出し 文字列 ) を引数に渡して、「 \ く名前 > mark 」を実行する。 10. 必要に応じて toc ファイルに必要な項目を書き出す ( 現在ではほとんど使われていない ) 。 11. 「 \@く名前 >pageend 」を実行する。 5-7 のラベル定義は、次期バージョンでは 8 以降に置かれる 予定だ。 9 は、柱、ノンプルの出力を見出しに連動させるための 仕掛けだが、「 \ く名前 > mark 」はこの段階では空の定義が行 われるだけで、実際には ewb21atex. cls の \headingstyle で その内容が定義される。 同様に、 1 , 8 , 1 1 の、「 \@く名前 >pagehead 」、「 \@m欲 e く名前 > head 」、「 \鈬名前 >pageend 」は、見出しの出力方法を具体 的に定義するものだが、この段階ではまだ定義されていな い。これらを定義するのが、 ewb21atex. cls ( リスト 2 ) で \newsection の次に記述されている \headsection である。 \headsection マクロ 見出しマクロの体裁を定義するのが、 \headsection マク ロである。具体的には前述の 3 つのマクロ、 を定義することによって、見出しの体裁を決定する。 eadsecti 。Ⅱマクロの引数は、リスト 4 の通り。実際の 使われ方は、リスト 2 の 2 行目のようになる。第 1 引数の 「く名前 > 」は、 \chapter ならば「 chapter 」になる。 以下、上述の \headsection マクロで作られる 3 つのマク ロの実際の動作について、 \headsection マクロの引数と合 ・ \@く名前 >pagehead ・ \@make く名前 >head ・ \9 く名前 >pageend わせて解説していこう。 算用数字 ローマ数字 アルファベット \arabic \roman \alph 小文字 大文字 \Roman \AIph マリスト 3 見出しマクロの引数 192 BSD magazine 2001 NO. 9 拡張子が . rog のファイルのことである。 注 2 r 。 g ファイルとは、 TEX 中で見出しとラベルが生成される際に、ページ番号などを TEX の外で利用できるように、そのラベル情報を書き出しておく、 \headsection{ 名前 } [ 起こし ] { 前空き } [ 問答 ] { 本体高さ } [ 付き方 ] { 後ろ空き } マリスト 4 \ h ・ a ecti 。れマクロの引数 \ 見出しマクロ [ トリガを取り除いた見出し文字列 ] { 見出し文字列 } [ ラベル名 ]
一講座 し文字列の内、標準ではページ番号だけをハイバーリンク 化している。ハイバーリンク化すると、対象文字列が \hbox に入り、 ( / / url 中で@@hb て eak ( ) で改行したもの以外 は ) 途中で改行できなくなるので、長い文字列をハイバー リンク化することはお勧めできない。 \newsection マクロ \newsection マクロでは、引数で見出し番号の表現方法 を指定している。第 1 引数の長名前 > 」は、 \chapter を 生成するなら「 chapter 」になる。第 2 引数のオプション引 数で見出しカウンタの表記方法を指定している。表 1 の い TEX 標準で用意されている表記法が利用できる。 指定した表記が ( 第 1 引数が chapter ならば ) 「 \the chapter 」というマクロ名で出力される。続く第 3 引数で、 見出し番号全体の表記方法を指定している。 第 \thechapter 早 となっていると、「第 1 章」のように出力されることになる。 この表記は「 \THEchapter 」というマクロ名で利用できる。 guisted では、「見出し文字列」という指定項目の「 % 文 字列 % 」を除いた部分が、この \newsection の第 3 引数に 使われるようになっている ( 図 1 の 1 ) 。 リスト 2 にはないが第 4 引数をオプションで指定できるよ うになっており、そこで見出し番号をリセットする見出し ケージの \resizebox を使うことが多いようだ \newslip は、行送りなどの段落組版の指定 ( スリップ ) を行うマクロである。同名のスリップがデフォルトで使わ れる。 その後の一連のスイッチの指定は、 EWB 3.2 になって導 入されたもので、見出しで生成されるラベルに対して参照 を行ったものを、 PDF にした際にハイバーリンク化するか どうかを指定するものだ。ページ番号、見出し番号、見出 9 トリガ「一一一一・ 大見出し 字送り一 和文書体 行送り一 和文変形 和文級数一 見出し文字列 犬ー 犬ージスタイル番号『一一一 有効 P リング 3 新止 -- ld 正体 上下左中右 え 13.0 を 1 章ロロロロロロロロロ 0 3 図 1 guisted の //i 定義画面 V リスト 2 “ b21 t 。 x. 矼きの \ 叩て生成部分 10 12 3 9 4 1 2 7 8 *nevsection{chapter}[* rab c] *thechapter ー \ } ] { 1 . 00 \ Vok Ⅱて i } *headsection{chapter}[ ] { 0 00 \ V0k Ⅱて i } [ 4.00 \ Ok て i ] { 13 . 00 \ V0k て i } [ *Dec1areCompositFont{chapterH4 .00Q } [ 42.00H ] {JYI sgo / b / Ⅱ } [ 44.00Q ] { JEI sgo/b/n} [ 0.0302 ] *Dec1areCompositFont{tt@chapter}{44.00Q}[42. OOH]{JYl/sgo/b/n}[44. OOQ]{OTl/cmtt/m/n}[O. 0302五] *Dec1areCompositFont{choi@chapter}{44.00Q}[37.80H]{JYl/sg0/b/ba}[44. OOQ]{JEl/sgo/b/ba}[O . 030Zh] *Dec1areCompositFont{ch0ii@chapter}{44.00Q}[33.60H]{JYl/sgo/b/ca}[44. OOQ]{JEl/sgo/b/ca}[O. 030Z五] *Dec1areCompositFont{ch0iii@chapter}{44.00Q} [ 29.40H ] { JYI / sgo / b / da } [ 44. 00Q ] { JEI / sgo / b / da } [ 0 . 030Z ] *Dec1areCompositFont{ch0iv@chapter}{44.00Q}[25.20H]{JYl/sgo/b/ea}[44. OOQ]{JEl/sgo/b/ea}[O. 030Z五] 14 \ Ⅱ evslip { c 五 apte て } { 48.00H } { 0 \ 五 0k Ⅱて i } { 0.00 \ H0k て i } { 0.00 H0kuri} *nevif*if@pageref@chapter@evbhyperlink %@pageref@chapter@evbhyperlinktrue *nevif*if@numref@chapter@evbhyperlink *@numref@chapter@evbhyperlinkfalse *nevif*if@strref@chapter@evbhyperlink *@strref@chapter@evbhyperlinkfals 17 191 BSD magazine 2001 No. 9
E Ft ロ′ロ々住 c わ defcaption で定義し、 //i, / / ⅱ , / / i ⅱなどがそれぞれ caption, section, subsecti 。Ⅱなどに 1 対 1 で対応している。 caption, section などの名則はい TEX のマクロと同じ名 前だが、 EWB ではい TEX のマクロは用いず、完全に定義 しなおして使っている。ますは ewb21atex コマンドが見出し トリガをどのように変換するかを見てみよう。上の / / i の 見出しは、次のように変換される。 \chapter{ タイトル } CtestOOOI] 最後についているオプション汨は、 ewb21atex コマンドが各 見出しに割り振るラベル名である。ラベル名の前半の 「 test 」という文字列は EWB の原稿ファイル名 test. ewb の べースネーム部分、後半の「 0001 」は ewb21atex コマンド が各ファイルごとにふる連番である。 \chapter はこのラベ ル名でラベルを生成する。 ewb21atex コマンドは、同時に work ディレクトリに同じ べースファイル名の拡張子を「 . sec 」にしたファイルを作 成し、次のような内容のデータを見出しごとに出力する。 マクロ名ラへル名トリガを取り除いた見出し文字列 上の例ならば、 chapter test0001 タイトル という行が生成されることになる。取り除かれるトリガは、 defsimple, defgothic, defnoexpand, deflabel, defref で定義さ れたトリガだ。この拡張子が . sec のファイルは後で、 ・ PDF のしおり生成 ・目次生成 にトリガが含まれる場合だ。 もう少し複雑な例で見てみよう。今度は見出し文字列 の際に用いられることになる。 マリストわ / / i を ewb21atex コマンドで変換したもの //i タイトル //tt{/ TitIe//tt} 生成される . sec ファイルの該当行は、次のようになる。 chapter test0001 タイトル / Tit1e 同時に渡されるようになっているのである。 定の無い見出し文字列を利用するために、この文字列が オプションの第 1 引数に渡されている。柱などで余計な指 になる。やはり同じようにトリガカ陬り除かれた文字列が、 この場合に出力される TEX ファイルは、リスト 1 のよう らかじめ不要なトリガを取り除いてある。 おりを生成する際に、この文字列を利用しやすいよう、あ 血のトリガが取り除かれているのである。目次、 PDF のし 今度は、 これらの \ chapter などの見出しマクロがどのよ うに動作するのかを見ていこう。 これらの見出しマクロの動作を規定する、というよりむ しろ、これらの見出しマクロを作成するのは、 guisted (pssted) から生成される ewb21atex. cls である。図 1 の guisted から生成された ewb21atex. cls の \chapter 生成部分 は、リスト 2 のようになる。 リスト 2 の内、 \ chapter マクロを作成し、その組版を規 定しているのは、最初の \newsection と \headsection であ るが、まずはそれ以下の部分を簡単に説明しておこう。 \Dec1areCompositFont は、利用するフォントセット ( コ ンポジット ) を用意するマクロである。 chapter コンポジッ トが大見出しでは標準で使われることになる。 tt@ch 叩 ter は、 //tt (\tt) で使われるコンポジット。 choi@ch 叩 ter, choii@chapter, choiii@ch 叩 ter, choiv@ch 叩 ter は長体フォン ト用のコンポジットで、これらを使う \choi, \choii, \ ch 。ⅱ i ハ ch 。 iv も用意されているのだが、標準ではこれら を使うトリガが用意されていない。現在はフォントはすべ て PS フォントとなっているため、これらの長体フォントは 利用せすに、 EWB で標準でロードされている graphics パッ \chapter [ { タイトル / Tit1e}] { タイトル {\tt{}/ Tit1e}} [test0001] 注 1 通常のい TEX では、次の行が「 [ 」で始まる場合にコマンドのオプション引数と取り違われることがあるので、このように引数の最後にオプションは 作るべきではないのだが、 EWB の場合は ewb2 ex コマンドが機械的に見出し行の次を空行、すなわち \ par にしてしまうので、この取り違いが起こ ることはあり得ない。 190 BSD magazine 2001 NO. 9